//package net.jjjshop.front.service.order.impl;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import net.jjjshop.common.constants.ConfConstants;
//import net.jjjshop.common.entity.user.User;
//import net.jjjshop.common.entity.user.UserBill;
//import net.jjjshop.common.mapper.user.UserBillMapper;
//import net.jjjshop.common.util.BigDecimalUtil;
//import net.jjjshop.framework.core.pagination.BasePageParam;
//import net.jjjshop.framework.shiro.vo.LoginUserRedisVo;
//import net.jjjshop.framework.util.LoginUtil;
//import net.jjjshop.front.service.order.UserBillService;
//import net.jjjshop.front.service.user.UserService;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.math.BigDecimal;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * UserBillServiceImpl 接口实现
// */
//@Service
//public class UserBillServiceImpl extends ServiceImpl<UserBillMapper, UserBill> implements UserBillService {
//
//    @Resource
//    private UserBillMapper dao;
//    @Autowired
//    private UserService userService;
//
//    private static final Logger logger = LoggerFactory.getLogger(UserBillServiceImpl.class);
//
//    /**
//     * 新增/消耗  总金额
//     * @param pm Integer 0 = 支出 1 = 获得
//     * @param userId Integer 用户uid
//     * @param category String 类型
//     * @param date String 时间范围
//     * @param type String 小类型
//     * @return UserBill
//     */
//    @Override
//    public BigDecimal getSumBigDecimal(Integer pm, Integer userId, String category, String date, String type) {
//        QueryWrapper<UserBill> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("category", category).
//                eq("status", 1);
//        if (ObjectUtil.isNotNull(userId)) {
//            queryWrapper.eq("uid", userId);
//        }
//        if (null != pm) {
//            queryWrapper.eq("pm", pm);
//        }
//        if (null != type) {
//            queryWrapper.eq("type", type);
//        }
//        List<UserBill> userBills = dao.selectList(queryWrapper);
//        if (CollUtil.isEmpty(userBills)) {
//            return BigDecimal.ZERO;
//        }
//        return userBills.stream().map(UserBill::getNumber).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_DOWN);
//    }
//
//
//
//
//
//    @Override
//    public Boolean addBillRecord(String title, String category, Integer pm, BigDecimal num,Integer uid,  Integer yjType) {
//        UserBill bill = new UserBill();
//        bill.setPm(pm);
//        bill.setTitle(title);
//        bill.setCategory(category);
//        bill.setCreateTime(new Date());
//        bill.setUid(uid);
//        bill.setNumber(num);
//        if (null != yjType){
//            bill.setType(""+yjType);
//        }
//        return save(bill);
//    }
//
//    @Override
//    public Double getTzTotal() {
//        return dao.getTzTotal( LoginUtil.getLoginUserRedisVo().getUserId());
//    }
//
//    @Override
//    public Integer selectUserHelpNum(Integer uid) {
//        return dao.selectUserHelpNum(uid);
//    }
//
//    @Override
//    public Boolean saveBill(String title, String category, Integer pm, BigDecimal num, Integer uid, Integer yjType) {
//        logger.info("明细操作-------->",uid+"======"+num.doubleValue());
//        UserBill bill = new UserBill();
//        bill.setPm(pm);
//        bill.setTitle(title);
//        bill.setCategory(category);
//        bill.setCreateTime(new Date());
//        bill.setUid(uid);
//        if (null != yjType){
//            bill.setType(""+yjType);
//        }
//
//        bill.setNumber(num);
//        LoginUserRedisVo userRedisVo = LoginUtil.getLoginUserRedisVo();
//        User walletInfo = userService.getById(userRedisVo.getUserId());
////        LbUserWalletEntity walletInfo = walletService.getUserWalletInfo(uid);
//        if (pm == 1) {
////        LogUtils.getLog().debug("");
//            //扣除百分之10到现金账户
//            if (category.equals(ConfConstants.COMMISSION_TYPE)) {
//                logger.info("明细操作新增佣金-------->",uid+"======"+num.doubleValue());
//
//
//                    BigDecimal total = BigDecimalUtil.addDouble(walletInfo.getBalance(), num);
//                    walletInfo.setBalance(total);
//
//
//            }else if (category.equals(ConfConstants.INTEGRAL_TYPE)){
//                logger.info("明细操作新增积分-------->",uid+"======"+num.doubleValue());
//                //增加积分
//                walletInfo.setPoints(BigDecimalUtil.addDouble(new BigDecimal(walletInfo.getPoints()), num).intValue());
//            }
//            if (!userService.updateById(walletInfo)){
//                return false;
//            }
//        }
//        //支出
//        if (pm == 0) {
//            if (category.equals(ConfConstants.COMMISSION_TYPE)) {
//                walletInfo.setBalance(BigDecimalUtil.subDouble(walletInfo.getBalance(), num));
//            }
//            if (!userService.updateById(walletInfo)){
//                return false;
//            }
//        }
//        return save(bill);
//    }
//
//
//
//    @Override
//    public Boolean saveBill(String title, String category, Integer pm, BigDecimal num, Integer uid, Integer yjType,String mark) {
//        logger.info("扶持记录保存-------->",uid+"======"+num.doubleValue());
//        UserBill bill = new UserBill();
//        bill.setPm(pm);
//        bill.setTitle(title);
//        bill.setCategory(category);
//        bill.setCreateTime(new Date());
//        bill.setUid(uid);
//        bill.setMark(mark);//这里标记是用户的扶持记录
//        if (null != yjType){
//            bill.setType(""+yjType);
//        }
//
//        bill.setNumber(num);
//        LoginUserRedisVo userRedisVo = LoginUtil.getLoginUserRedisVo();
//        User walletInfo = userService.getById(userRedisVo.getUserId());
////        if (pm == 1) {
//////        LogUtils.getLog().debug("");
////            //扣除百分之10到现金账户
////            if (category.equals(ConfConstants.COMMISSION_TYPE)) {
////                logger.info("明细操作新增佣金-------->",uid+"======"+num.doubleValue());
////                if (walletInfo.getDevote().doubleValue() > 0){
////                    if (walletInfo.getDevote().doubleValue()< num.doubleValue()){
////                        //如果贡献值小于收益值，按照贡献值发放
////                        num = walletInfo.getDevote();
////                    }
////                    BigDecimal a = BigDecimalUtil.mul(num, new BigDecimal(ConfConstants.HANG_SALE_FEES));
////                    BigDecimal total = BigDecimalUtil.addDouble(walletInfo.getMoney(), BigDecimalUtil.subDouble(num, a));
////                    walletInfo.setEntityMoney(BigDecimalUtil.addDouble(walletInfo.getEntityMoney(), a));
////                    walletInfo.setTotalMoney(BigDecimalUtil.addDouble(walletInfo.getTotalMoney(), num));
////                    walletInfo.setMoney(total);
////                    walletInfo.setDevote(BigDecimalUtil.subDouble(walletInfo.getDevote(),num));
////                }else{
////                    logger.info("明细操作 没有贡献值，不能有收益-------->",uid+"======");
////                }
////
////            }
////            if (!walletService.updateById(walletInfo)){
////                return false;
////            }
////        }
//        //支出
////        if (pm == 0) {
////            if (category.equals(ConfConstants.COMMISSION_TYPE)) {
////                walletInfo.setMoney(BigDecimalUtil.subDouble(walletInfo.getMoney(), num));
////            }
////            if (!walletService.updateById(walletInfo)){
////                return false;
////            }
////        }
//        return save(bill);
//    }
//
//}
//
